package org.example;

/**
 * 算式类：表示一个数学运算式（如“1+2=3”）
 */
public class ArithmeticExpression {
    // 算式字符串（如“2+3”）
    private final String expressionStr;
    // 算式的计算结果
    private final double result;
    // 算式的运算符（如‘+’‘-’‘*’‘/’）
    private final char operator;

    /**
     * 构造方法：生成一个算式
     * @param num1 第一个运算数
     * @param num2 第二个运算数
     * @param operator 运算符（支持+、-、*、/）
     * @throws IllegalArgumentException 若运算符不合法或除法分母为0
     */
    public ArithmeticExpression(int num1, int num2, char operator) {
        this.operator = operator;
        // 拼接算式字符串
        this.expressionStr = num1 + String.valueOf(operator) + num2;
        // 根据运算符计算结果
        this.result = calculateResult(num1, num2, operator);
    }

    /**
     * 内部方法：根据运算数和运算符计算结果
     */
    private double calculateResult(int num1, int num2, char operator) {
        switch (operator) {
            case '+':
                return num1 + num2;
            case '-':
                // 确保减法结果非负（可选，根据需求调整）
                return Math.max(num1 - num2, 0);
            case '*':
                return num1 * num2;
            case '/':
                if (num2 == 0) {
                    throw new IllegalArgumentException("除法运算分母不能为0");
                }
                // 保留2位小数（可选，避免精度问题）
                return Math.round(((double) num1 / num2) * 100.0) / 100.0;
            default:
                throw new IllegalArgumentException("不支持的运算符：" + operator);
        }
    }

    /**
     * 获取算式字符串（如“2+3”）
     */
    public String getExpressionStr() {
        return expressionStr;
    }

    /**
     * 获取算式的正确结果
     */
    public double getResult() {
        return result;
    }

    /**
     * 验证用户输入的答案是否正确
     * @param answer 用户输入的答案
     * @return 正确返回true，错误返回false
     */
    public boolean checkAnswer(double answer) {
        // 浮点数比较：允许微小误差（避免精度问题）
        return Math.abs(answer - this.result) < 0.01;
    }
}
